home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-19 / rk_plot.zip / PLOT.DOC < prev    next >
Text File  |  1991-05-13  |  8KB  |  172 lines

  1. ┌───────────────────────────────────────────────────────────────────────────┐
  2. │                                                                           │
  3. │ Algorithmen zur grafischen Darstellung einer Funktion z = F(x,y).         │
  4. │                                                                           │
  5. │ Version 1.0                                                               │
  6. │                                                                           │
  7. ├───────────────────────────────────────────────────────────────────────────┤
  8. │ Copyright (C) 1991, Hans-Jürgen Herrler und Dieter Sosna                  │
  9. └───────────────────────────────────────────────────────────────────────────┘
  10.  
  11.  
  12.                         B E S C H R E I B U N G
  13.                         =======================
  14.  
  15. In der Unit PLOT sind einige schnelle Algorithmen zur grafischen Darstellung
  16. von Funktionen zweier Veränderlicher implementiert. Diese können leicht in
  17. eigene Programme eingebunden werden. Durch die Verfügbarkeit des Quelltextes
  18. ist eine Anpassung an spezielle Bedürfnisse möglich.
  19.  
  20. Die Unit PLOT ist unter Turbo Pascal ab Version 5.5 nutzbar (mit unbedeutenden
  21. Änderungen schon ab Version 4.0). Sollen auch Veränderungen an den Assembler-
  22. Routinen erfolgen, wird zusätzlich ein Assembler benötigt: z.B. Turbo
  23. Assembler 2.0.
  24.  
  25. Hinweise zur Weitergabe und zur Nutzung der Software werden in der Datei
  26. COPYRIGT.TXT gegeben.
  27.  
  28.  
  29.                         Allgemeines zur Nutzung
  30.                         =======================
  31.  
  32. Die Funktionswerte der darzustellenden Funktion z = F(x,y) müssen über einem
  33. äquidistanten Gitter (Stützstellen) berechnet und zeilenweise in einer Matrix
  34. abgelegt worden sein. Der Routine zur grafischen Darstellung wird nur ein
  35. Zeiger auf das erste Element der Matrix übergeben. So kann sich die Matrix an
  36. beliebiger Stelle im Speicher befinden. Es ist wichtig, daß die einzelnen
  37. Zeilen der Matrix lückenlos aufeinanderfolgen - auch bei einer Ablage der
  38. Matrix auf dem Heap! Andernfalls sind Änderungen an der Zeiger-Arithmetik
  39. erforderlich. Die Funktionswerte selbst sind vom Typ Float - definiert in der
  40. Unit PLOT. Der Typ Float kann den jeweiligen Erfordernissen angepaßt werden.
  41.  
  42. Im Kopf der Unit PLOT ist die Direktive "ALPHA-" zur bedingten Compilierung
  43. definiert. Dies bewirkt, daß bei den Darstellungen AlphaScheibenPerspektive
  44. und GitterFlaechenPerspektive (die beide auf dem modifizierten Alpha-Puffer-
  45. Algorithmus beruhen) in der Prozedur AlphaPunktSetzen (ALPHA-.ASM bzw.
  46. ALPHA-.OBJ) nicht überprüft wird, ob sich die Koordinaten des gerade be-
  47. arbeiteten Pixels innerhalb der Grenzen des Bildschirmes befinden:
  48.  
  49.     0 <= x <= GetMaxX,    0 <= y <= GetMaxY.
  50.  
  51. Diese Prüfung erübrigt sich in den meisten Fällen, da sich die Prozedur
  52. AlphaPunktSetzen auf Graph.PutPixel abstützt, wobei sowieso ein Clippen am
  53. eingestellten ViewPort erfolgt. Für spezielle Fälle ist aber auch eine Version
  54. von AlphaPunktSetzen vorhanden, die diesen Test selbst vollzieht: aktiviert
  55. durch Löschen der Compilerdirektive "ALPHA-" wird dann ALPHA.OBJ eingebunden.
  56.  
  57.  
  58.                    Routinen zur grafischen Darstellung
  59.                    ===================================
  60.  
  61. VolumenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
  62.                                 BildParm: BildParameter; UseHeap: Boolean)
  63.  
  64. AlphaScheibenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
  65.                                 BildParm: BildParameter)
  66.  
  67. GitterFlaechenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
  68.                                 BildParm: BildParameter; UseHeap: Boolean)
  69.  
  70.  
  71.                            Übergabeparameter
  72.                            =================
  73.  
  74. Parameter Matrix:
  75.     Darzustellende Funktionswerte (VAR-Parameter).
  76.  
  77. Record MatrixParm:
  78.     Enthält die Zeilen- (XGitter) und Spaltenzahl (YGitter) der Matrix sowie
  79.     den kleinsten (ZMin) und größten (ZMax) Funktionswert.
  80.  
  81. Record BildParm:
  82.     Enthält die Beschreibung des zu erzeugenden Bildes, also den Bildschirm-
  83.     ausschnitt (SchirmLinks, SchirmRechts, SchirmOben, SchirmUnten), Farben
  84.     (Color...), Betrachtungswinkel (Alpha, Gamma), Projektionsart und davon
  85.     abhängig den Betrachtungsabstand und die Brennweite bei Zentralprojektion
  86.     bzw. an deren Stelle das Verhältnis "BrennweiteZuAbstand" bei Parallel-
  87.     projektion.
  88.  
  89. Jene Darstellungen, die ein Gitter auf der Fläche erzeugen, können beschleu-
  90. nigt werden, wenn vorab alle Stützstellen auf Gerätekoordinaten transformiert
  91. werden. Dazu ist für den zusätzlichen Parameter UseHeap True zu übergeben. Es
  92. wird daraufhin geprüft, ob auf dem Heap Platz für eine temporäre Matrix ist
  93. und gegebenenfalls die Transformation ausgeführt. Danach wird der Platz auf
  94. dem Heap wieder freigegeben. Ist nicht ausreichend Platz vorhanden oder
  95. UseHeap = False, so wird ohne eine Vorab-Transformation gezeichnet.
  96.  
  97. Es gelten folgende Einschränkungen für die Parameter, die jeder Nutzer vor der
  98. Übergabe selbst überprüfen muß:
  99.  
  100.     2 <= XGitter <= MaxGitter
  101.     2 <= YGitter <= MaxGitter
  102.  
  103.     0 <= SchirmLinks < SchirmRechts <= 1
  104.     0 <= SchirmOben  < SchirmUnten  <= 1
  105.  
  106.     -180 <= Alpha <= 180
  107.     -90  <= Gamma <= 90
  108.          (bei AlphaScheibenPerspektive nur 0 <= Gamma <= 90)
  109.  
  110. Sinnvoll sind folgende Werte:
  111.  
  112.     20   <= Brennweite <= 60
  113.     200  <= Abstand    <= 4000
  114.     BrennweiteZuAbstand etwa 0.1
  115.  
  116. Beim Experimentieren mit Brennweite und Abstand kann man sich an üblichen
  117. Werten aus der Kleinbildfotografie orientieren.
  118.  
  119. Der Wert Alpha = 0 entspricht einer Lage der x-Achse parallel zur Bildschirm-
  120. ebene mit wachsenden Werten nach rechts, während die y-Achse senkrecht auf der
  121. Bildschirmebene steht und vom Betrachter weg weist. Eine Vergrößerung von
  122. Alpha dreht die x-Achse aus der Bildschirmebene zum Betrachter hin.
  123.  
  124. Bei der Wahl der Projektionsart Zentralprojektion ist zu beachten, daß nur die
  125. VolumenPerspektive fehlerfreie Bilder garantiert. AlphaScheibenPerspektive und
  126. GitterFlaechenPerspektive können bei Zentralprojektion zu Bildfehlern führen!
  127.  
  128.  
  129.               Zugriff auf die Matrix der Funktionswerte
  130.               =========================================
  131.  
  132. Weiterhin wird eine Funktion zum Zugriff auf die Matrixelemente bereit-
  133. gestellt, die insbesondere bei Ablage der Matrix auf dem Heap nützlich ist:
  134.  
  135.     FUNCTION Element(P: Pointer; i, j, SpaltenLen: Word): FloatPointer;
  136.  
  137. Ihre Argumente sind:
  138.  
  139.    P            ein Zeiger auf das erste Matrixelement
  140.    i            Zeilennummer des Matrixelementes
  141.    j            Spaltennummer des Matrixelementes
  142.    SpaltenLen   Zahl der Matrixelemente in einer Zeile ( = XGitter)
  143.  
  144. Die Funktion liefert dann einen Zeiger auf das gesuchte Element.
  145.  
  146.  
  147.                     Liste der zugehörigen Dateien
  148.                     =============================
  149.  
  150.     COPYRIGT.TXT    Benutzerlizenz.
  151.  
  152.     PLOT.DOC        Diese Beschreibung.
  153.  
  154.     PLOT.PAS        Enthält Quelltext der Algorithmen zur grafischen
  155.                     Darstellung (Unit).
  156.  
  157.     ALPHA.ASM       Assembler-Quelltext einiger Routinen aus PLOT.PAS,
  158.                     Version mit Bereichsprüfung.
  159.     ALPHA.OBJ       Zugehöriges Objektfile.
  160.  
  161.     ALPHA-.ASM      Assembler-Quelltext einiger Routinen aus PLOT.PAS,
  162.                     Version ohne Bereichsprüfung.
  163.     ALPHA-.OBJ      Zugehöriges Objektfile.
  164.  
  165.     ZEIGER.ASM      Assembler-Quelltext einiger Routinen zur Pointer-
  166.                     Arithmetik aus PLOT.PAS.
  167.     ZEIGER.OBJ      Zugehöriges Objektfile.
  168.  
  169.     EXAMPLE.PAS     Quelltext des Beispielprogramms.
  170.     EXAMPLE.EXE     Lauffähiges Beispielprogramm.
  171.     EXAMPLE7.EXE    Lauffähiges Beispielprogramm (Version für 80x87).
  172.